home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / GEM / EASYGEM0.D < prev    next >
Encoding:
Modula Definition  |  1990-12-11  |  12.5 KB  |  357 lines

  1. DEFINITION MODULE EasyGEM0;
  2.  
  3.  
  4. (*  System              : Megamax Modula-2 (MOS 2.0)
  5.  *  Autor & Copyright   : Manuel Chakravarty
  6.  *  Vertrieb            : Application Systems Heidelberg
  7.  *  Version             : 1.2
  8.  *)
  9.  
  10. (*  Dieses Modul stellt eine Reihe von oft gebrauchten GEM-Funktionen zur
  11.  *  Verfügung, die auf den verschiedenen AES-Funktionen und den Routinen
  12.  *  des Moduls 'ObjHandler' aufbauen.
  13.  *)
  14.  
  15.  
  16. FROM    SYSTEM     IMPORT WORD;
  17.  
  18. FROM    GrafBase   IMPORT Rectangle;
  19.  
  20. FROM    GEMGlobals IMPORT PtrObjTree, ObjState, ObjFlag, PtrMaxStr;
  21.  
  22. FROM    GEMEnv     IMPORT DeviceHandle;
  23.  
  24.  
  25.                 (*  Routinen zum Erfragen von GEM-Parametern  *)
  26.                 (*  ========================================  *)
  27.  
  28. PROCEDURE DeskSize (): Rectangle;
  29.  
  30.         (*  Liefert die Ausmaße des Desktops (Arbeitsbereich).
  31.          *)
  32.  
  33. PROCEDURE CharSize (    devHandle: DeviceHandle;
  34.                     VAR boxWidth,
  35.                         boxHeight: CARDINAL);
  36.  
  37.         (*  Liefert die Ausmaße der größten Zeichenbox des aktuellen
  38.          *  Fonts auf dem bezeichneten Gerät.
  39.          *)
  40.  
  41.  
  42.                         (*  Mauszeiger  *)
  43.                         (*  ==========  *)
  44.  
  45. PROCEDURE ShowArrow;
  46.  
  47.         (*  Verwandelt den Mauszeiger in einen Pfeil.
  48.          *)
  49.  
  50. PROCEDURE ShowBee;
  51.  
  52.         (*  Verwandelt den Mauszeiger in eine Biene.
  53.          *)
  54.  
  55. PROCEDURE HideMouse;
  56.  
  57.         (*  Macht den Mauszeiger unsichtbar (mittels 'AESGraphics.GrafMouse').
  58.          *)
  59.  
  60. PROCEDURE ShowMouse;
  61.  
  62.         (*  Macht den Mauszeiger sichtbar (mittels 'AESGraphics.GrafMouse').
  63.          *)
  64.  
  65.  
  66.                         (*  Alert-Box  *)
  67.                         (*  =========  *)
  68.  
  69. PROCEDURE WrapAlert (VAR s: ARRAY OF CHAR; width: CARDINAL);
  70.  
  71.         (*  Bricht eine Zeichenkette für eine Alert-Box um.
  72.          *
  73.          *  Dabei werden '|'-Zeichen derart in die Zeichenkette eingefügt,
  74.          *  daß keine Zeile breiter als 'width' ist.
  75.          *  Ist 'width = 0', so wird die Maximalbreite (29) genommen.
  76.          *)
  77.  
  78. PROCEDURE FormAlert (    defBut: CARDINAL;
  79.                      REF str   : ARRAY OF CHAR;
  80.                      VAR retBut: CARDINAL     );
  81.  
  82.         (*  Stellt eine Alert-Box dar.
  83.          *
  84.          *  Die Funktion besitzt dieselben Eigenschaften wie 'AESForms.
  85.          *  FormAlert', allerdings ist es bei dieser Routine nicht
  86.          *  nötig, vorher das GEM (mit 'InitGem') zu initalisieren.
  87.          *)
  88.  
  89. PROCEDURE TextStringAddress (idx: CARDINAL): PtrMaxStr;
  90.  
  91.         (*  Liefert die Adresse des Zeichenkette in der aktuellen Resource-
  92.          *  Datei.
  93.          *
  94.          *  Die Resource-Datei muß vorher mittels 'AESResources.LoadResource'
  95.          *  geladen worden sein.
  96.          *)
  97.  
  98.  
  99.                 (*  Routinen für den Umgang mit Objektbäumen  *)
  100.                 (*  ========================================  *)
  101.  
  102. PROCEDURE TreeAddress (idx: CARDINAL): PtrObjTree;
  103.  
  104.         (*  Liefert die Adresse des bezeichneten Objektbaums in der aktuellen
  105.          *  Resource-Datei.
  106.          *
  107.          *  Die Resource-Datei muß vorher mittels 'AESResources.LoadResource'
  108.          *  geladen worden sein.
  109.          *)
  110.  
  111. PROCEDURE ObjectSpaceWithAttrs (tree: PtrObjTree; obj: CARDINAL): Rectangle;
  112.  
  113.         (*  Ermittelt die Position und Ausmaße eines Objektes relativ
  114.          *  zum übergeordneten Objekt unter Berücksichtigung der Objekt-
  115.          *  attribute, wie Schatten, Ausgangsobjekt, etc.
  116.          *)
  117.  
  118. PROCEDURE AbsObjectSpace (tree: PtrObjTree; obj: CARDINAL): Rectangle;
  119.  
  120.         (*  Ermittelt die Position und Ausmaße eines Objektes bezüglich
  121.          *  des Koordinatennullpunktes (Attribute werden berücksichtigt).
  122.          *)
  123.  
  124. PROCEDURE SetObjStateElem (tree : PtrObjTree;
  125.                            obj  : CARDINAL;
  126.                            elem : ObjState;
  127.                            value: BOOLEAN);
  128.  
  129.         (*  Setzt oder löscht ein Element des Objektstatus-Sets, je nach
  130.          *  Wert von 'value'.
  131.          *)
  132.  
  133. PROCEDURE ObjectStateElem (tree : PtrObjTree;
  134.                            obj  : CARDINAL;
  135.                            elem : ObjState  ): BOOLEAN;
  136.  
  137.         (*  Liefert den Zustand eines Elements des Objektstatus-Sets.
  138.          *)
  139.  
  140. PROCEDURE ToggleObjState (tree  : PtrObjTree;
  141.                           obj   : CARDINAL;
  142.                           elem  : ObjState;
  143.                           redraw: BOOLEAN);
  144.  
  145.         (*  Kippt den Zustand eines Elements des Objektstatus-Sets.
  146.          *  Und zeichnet das Objekt falls gewünscht neu.
  147.          *)
  148.  
  149. PROCEDURE SetObjFlag (tree : PtrObjTree;
  150.                       obj  : CARDINAL;
  151.                       elem : ObjFlag;
  152.                       value: BOOLEAN);
  153.  
  154.         (*  Setzt oder löscht ein Element des Objektflags-Sets, je nach
  155.          *  Wert von 'value'.
  156.          *)
  157.  
  158. PROCEDURE ObjectFlag (tree : PtrObjTree;
  159.                       obj  : CARDINAL;
  160.                       elem : ObjFlag   ): BOOLEAN;
  161.  
  162.         (*  Liefert den Zustand eines Elements des Objektflags-Sets.
  163.          *)
  164.          
  165. PROCEDURE SetTextString (    tree: PtrObjTree;
  166.                              obj : CARDINAL;
  167.                          REF str : ARRAY OF CHAR);
  168.  
  169.         (*  Liefert den Text eines Objektes vom Typ 'textObj', 'boxTextObj',
  170.          *  'fTextObj', 'fBoxTextObj', 'buttonObj', 'stringObj' oder
  171.          *  'titleObj'.
  172.          *)
  173.  
  174. PROCEDURE GetTextString (    tree: PtrObjTree;
  175.                              obj : CARDINAL;
  176.                          VAR str : ARRAY OF CHAR);
  177.  
  178.         (*  Liefert den Text eines Objektes vom Typ 'textObj', 'boxTextObj',
  179.          *  'fTextObj', 'fBoxTextObj', 'buttonObj', 'stringObj' oder
  180.          *  'titleObj'.
  181.          *)
  182.  
  183.  
  184.                 (*  Routinen zum Animieren von Dialogboxen  *)
  185.                 (*  ======================================  *)
  186.  
  187. PROCEDURE PrepareBox (    box   : PtrObjTree;
  188.                           origin: Rectangle;
  189.                       VAR space : Rectangle);
  190.  
  191.         (*  Macht eine Dialogbox sichtbar. Dabei wird ein rechteckiger
  192.          *  Rahmen animiert (GrowBox), der seinen Ursprung bei 'origin'
  193.          *  hat. Ist die Breite von 'origin' negativ, so wird der Rahmen
  194.          *  nicht animiert.
  195.          *  Die Prozedur liefert in 'space' den von der Box belegten
  196.          *  Bildschirmbereich.
  197.          *)
  198.  
  199. PROCEDURE ReleaseBox (box   : PtrObjTree;
  200.                       origin,
  201.                       space : Rectangle);
  202.  
  203.         (*  Entfernt eine Dialogbox vom Bildschirm. Dabei wird ein recht-
  204.          *  eckiger Rahmen animiert, der sich zu 'origin' bewegt (ShrinkBox),
  205.          *  falls die Breite nicht negativ ist. In 'space' wird der von der
  206.          *  Box belegte Bildschirmbereich übergeben.
  207.          *)
  208.  
  209. PROCEDURE DoSimpleBox (    box    : PtrObjTree;
  210.                            origin : Rectangle;
  211.                        VAR exitBut: CARDINAL);
  212.  
  213.         (*  Führt einen kompletten Dialog durch. 'origin' ist dabei der
  214.          *  Ausgangspunkt des animierten Rechtecks. Ist die Breite von
  215.          *  'origin' negativ, so wird der Rahmen (Grow/ShrinkBox) nicht
  216.          *  animiert.
  217.          *  Die Prozedur liefert den Objektindex des Objektes in 'exitBut',
  218.          *  dessen Selektion den Abbruch des Dialoges bewirkt hat.
  219.          *)
  220.  
  221.  
  222. (*  Grundfunktionen für komplexe Dialogboxen  *)
  223.  
  224. PROCEDURE DeselectButton (tree: PtrObjTree; button: CARDINAL);
  225.  
  226.         (*  Deselektiert einen Dialogboxknopf und zeichnet ihn neu.
  227.          *)
  228.  
  229. PROCEDURE ToggleSelectBox (tree: PtrObjTree; selectBox: CARDINAL);
  230.  
  231.         (*  Je nach aktuellem Zustand des Objektes wird das Objekt
  232.          *  selektiert oder deselektiert. Mit Neuzeichnen.
  233.          *)
  234.  
  235. PROCEDURE ToggleCheckBox (tree: PtrObjTree; checkBox: CARDINAL);
  236.  
  237.         (*  Schaltet je nach Zustand den Haken eines Objektes an oder
  238.          *  aus. Mit Neuzeichnen.
  239.          *)
  240.  
  241. PROCEDURE ToggleCheckPlus (    tree    : PtrObjTree;
  242.                                checkBox: CARDINAL;
  243.                            REF fellows : ARRAY OF CARDINAL);
  244.  
  245.         (*  Schaltet den Haken eines Objektes an oder aus. Dabei werden
  246.          *  abhänige Objekte 'fellows' aktiviert oder deaktiviert. Alle
  247.          *  veränderten Objekte werden neu gezeichnet.
  248.          *)
  249.  
  250. (*  Die folgenden fünf Prozeduren erlauben das Setzen und Auslesen
  251.  *  verschiedener Datentypen in bzw. aus Objektbäumen.
  252.  *  Dabei bezeichnet 'tree' den zu verwendenden Objektbaum und 'obj'
  253.  *  das angesprochene Objekt, das immer eine Zeichenkette enthalten
  254.  *  muß.
  255.  *  Wird ein Wert gesetzt, d.h. 'mode = setValue', so wird 'value'/'str'
  256.  *  nicht verändert.
  257.  *)
  258.  
  259. TYPE    SetGetMode      = (setValue, getValue); (*  Wert setzen/lesen  *)
  260.  
  261. PROCEDURE SetGetBoxCard (    tree : PtrObjTree;
  262.                              obj  : CARDINAL;
  263.                              mode : SetGetMode;
  264.                          VAR value: CARDINAL);
  265.  
  266. PROCEDURE SetGetBoxLCard (    tree : PtrObjTree;
  267.                               obj  : CARDINAL;
  268.                               mode : SetGetMode;
  269.                           VAR value: LONGCARD);
  270.  
  271. PROCEDURE SetGetBoxInt (    tree : PtrObjTree;
  272.                             obj  : CARDINAL;
  273.                             mode : SetGetMode;
  274.                         VAR value: INTEGER);
  275.  
  276. PROCEDURE SetGetBoxLInt (    tree : PtrObjTree;
  277.                              obj  : CARDINAL;
  278.                              mode : SetGetMode;
  279.                          VAR value: LONGINT);
  280.  
  281. PROCEDURE SetGetBoxStr (    tree : PtrObjTree;
  282.                             obj  : CARDINAL;
  283.                             mode : SetGetMode;
  284.                         VAR str  : ARRAY OF CHAR);
  285.  
  286. PROCEDURE SetGetBoxState (    tree : PtrObjTree;
  287.                               obj  : CARDINAL;
  288.                               mode : SetGetMode;
  289.                               state: ObjState;
  290.                           VAR value: BOOLEAN);
  291.  
  292.         (*  Diese Routinen dient zum Setzen oder Auslesen eines Objekt-
  293.          *  status. Dabei gibt 'state' an welcher Status, also welches
  294.          *  Element der Statusmenge, beeinflußt werden soll. 'value' be-
  295.          *  sagt ob der Status gesetzt 'TRUE' oder gelöscht 'FALSE' ist.
  296.          *  Wird ein Wert gesetzt, d.h. 'mode = setValue', so wird 'value'
  297.          *  nicht verändert.
  298.          *)
  299.  
  300. TYPE    ObjEnumRef      = RECORD
  301.                             obj  : CARDINAL;
  302.                             value: WORD;
  303.                           END;
  304.                           
  305. PROCEDURE SetGetBoxEnum (    tree : PtrObjTree;
  306.                          REF refs : ARRAY OF ObjEnumRef;
  307.                              mode : SetGetMode;
  308.                          VAR value: WORD);
  309.  
  310.         (*  Dient zum Setzen oder Auslesen einer Gruppe von Radioknöpfen.
  311.          *  Dazu wird in 'refs' die Zuordnung der einzelnen Knöpfe zu den
  312.          *  Werten eines Aufzählungstyps festgelegt. 'value' gibt den aktu-
  313.          *  ellen Wert des Aufzählungstyps wieder. Beispiel:
  314.          *
  315.          *      TYPE        color       = (red, green, blue);
  316.          *      VAR         refs        = ARRAY[1..3] OF ObjEnumRef;
  317.          *                  currColor   = color;
  318.          *
  319.          *      refs [1|2|3|] = {redButIdx, red}|{greenButIdx, green}|
  320.          *                      {blueButIdx, blue}
  321.          *
  322.          *  Ist nun das Objekt, welches den Index 'greenButIdx' besitzt,
  323.          *  selektiert, so gilt nach dem Aufruf
  324.          *
  325.          *      SetGetBoxEnum (tree, refs, getValue, currColor);
  326.          *
  327.          *  für 'currColor': currColor = green
  328.          *
  329.          *  Wird ein Wert gesetzt, d.h. 'mode = setValue', so wird 'value'
  330.          *  nicht verändert.
  331.          *)
  332.  
  333.  
  334.                 (*  Routinen für das Desktop- und Wdw-Managment  *)
  335.                 (*  ===========================================  *)
  336.  
  337. PROCEDURE ForceDeskRedraw;
  338.  
  339.         (*  Erwirkt das Neuzeichnen des gesamten Desktopbereichs.
  340.          *  (Durch Absetzen einer Redraw-Message)
  341.          *)
  342.  
  343. PROCEDURE DrawObjInWdw (tree  : PtrObjTree;
  344.                         obj   : CARDINAL;
  345.                         drawBg: BOOLEAN;
  346.                         window: CARDINAL);
  347.  
  348.         (*  Zeichnet einen Ausschnitt eines Objektbaumes unter Berücksichtig-
  349.          *  ung der Sichtbarkeit des Fensters 'window'. Dabei geben die Aus-
  350.          *  maße von 'obj' den Ausschnitt an und 'drawBg' bestimmt, ob die
  351.          *  Objekte, die auf gleicher oder höherer Ebene als 'obj' liegen
  352.          *  auch gezeichnet werden.
  353.          *)
  354.  
  355.  
  356. END EasyGEM0.
  357.